0100 ; 0110 ; File: D:PLANET2.M65 0120 ; 0130 ; ---------------- 0140 ; Initialize Misc. 0150 ; ---------------- 0160 ; 0170 INIT LDA #0 ;zero out.. 0180 STA SCORE ;score byte 0 0190 STA SCORE+1 ;score byte 1 0200 STA SCORE+2 ;score byte 2 0210 STA DEADTM ;dead timer 0220 STA PAUSED ;pause flag 0230 STA EXPCNT ;expl. counter 0240 STA SAUCER ;no saucer 0250 STA BLEVEL ;bomb level 0260 LDX #11 ;no bombs! 0270 CLRACT STA BOMACT,X ;deactivate 0280 DEX ;next bomb 0290 BPL CLRACT ;done? No. 0300 LDX #19 ;zero score line 0310 INISLN LDA SCOINI,X ;get byte 0320 STA SCOLIN,X ;put score line 0330 DEX ;next byte 0340 BPL INISLN ;done? No. 0350 LDA #$01 ;get one 0360 STA LEVEL ;game level 0370 STA SATLIV ;live satellite 0380 LDA #4 ;get 4 0390 STA LIVES ;number of lives 0400 LDA #$0C ;set explosion 0410 STA COLOR0+2 ;brightness 0420 LDA #$34 ;medium red 0430 STA PCOLR0 ;bomb 0 color 0440 STA PCOLR0+1 ;bomb 1 color 0450 STA PCOLR0+2 ;bomb 2 color 0460 LDA #127 ;center screen X 0470 STA CURX ;cursor X pos 0480 LDA #129 ;center screen Y 0490 STA CURY ;cursor Y pos 0500 LDA #1 ;get one 0510 STA GAMCTL ;game control 0520 JSR SHOSCO ;display score 0530 LDA #$54 ;graphic-LF of 0540 STA SCRN+1939 ;planet center 0550 LDA #$15 ;graphic-RT of 0560 STA SCRN+1940 ;planet center 0570 STA HITCLR ;reset collision 0580 ; 0590 ; ---------------------- 0600 ; Set up level variables 0610 ; ---------------------- 0620 ; 0630 SETLVL JSR SHOLVL ;show level 0640 LDX BLEVEL ;bomb level 0650 LDA INIBOM,X ;bombs / level 0660 STA BOMBS ;bomb count 0670 LDA INIBS,X ;bomb speed 0680 STA BOMTI ;bomb timer 0690 LDA INISC,X ;% chance of 0700 STA SAUCHN ;saucer in level 0710 LDA INIPC,X ;planet color 0720 CMP #$FF ;level >14? 0730 BNE SAVEPC ;No. skip next 0740 LDA RANDOM ;random color 0750 AND #$F0 ;mask off lum. 0760 SAVEPC STA PLNCOL ;planet color 0770 LDA INIBVL,X ;bomb value low 0780 STA BOMVL ;save it 0790 LDA INIBVH,X ;bomb value hi 0800 STA BOMVH ;save it 0810 LDA INISV,X ;saucer value 0820 STA SAUVAL ;save that too 0830 CPX #11 ;at level 11? 0840 BEQ SAMLVL ;Yes. skip next 0850 INC BLEVEL ;inc bomb level 0860 SAMLVL SED ;decimal mode 0870 LDA LEVEL ;game level # 0880 CLC ;clear carry 0890 ADC #1 ;add one 0900 STA LEVEL ;save game level 0910 CLD ;clear decimal 0920 ; 0930 ; ----------------- 0940 ; Main program loop 0950 ; ----------------- 0960 ; 0970 LOOP LDA PAUSED ;game paused? 0980 BNE LOOP ;Yes. loop here 0990 LDA #0 ;get zero 1000 STA ATRACT ;attract mode 1010 LDA GAMCTL ;game done? 1020 BPL CKCORE ;No. check core 1030 LDA EXPCNT ;Yes. expl count 1040 BNE CKCORE ;count done? No. 1050 JMP ENDGAM ;The End! 1060 ; 1070 ; -------------------------- 1080 ; Check planet core for hit! 1090 ; -------------------------- 1100 ; 1110 CKCORE LDA SCRN+1939 ;center LF 1120 AND #$03 ;RT color clock 1130 CMP #$03 ;explosion colr? 1140 BEQ PLDEAD ;Yes. go dead 1150 LDA SCRN+1940 ;center RT 1160 AND #$C0 ;LF color clock 1170 CMP #$C0 ;explosion colr? 1180 BNE PLANOK ;No. skip next 1190 ; 1200 ; --------------- 1210 ; Planet is Dead! 1220 ; --------------- 1230 ; 1240 PLDEAD LDA #0 ;get zero 1250 STA BOMBS ;zero bombs 1260 STA SATLIV ;satelite dead 1270 LDA #$FF ;get #$FF 1280 STA LIVES ;no lives left 1290 STA GAMCTL ;game control 1300 JSR SNDOFF ;no sound 1310 ; 1320 ; ------------- 1330 ; Check console 1340 ; ------------- 1350 ; 1360 PLANOK LDA CONSOL ;get console 1370 CMP #7 ;any pressed? 1380 BEQ NORST ;No. skip next 1390 JMP PLANET ;restart game! 1400 ; 1410 ; ----------------- 1420 ; Projectile firing 1430 ; ----------------- 1440 ; 1450 NORST JSR BOMINI ;try new bomb 1460 LDA SATLIV ;satellite stat 1470 BEQ NOTRIG ;alive? No. 1480 LDA STRIG0 ;get trigger 1490 CMP LASTRG ;same as last VB 1500 BEQ NOTRIG ;Yes. skip next 1510 STA LASTRG ;No. save trig 1520 CMP #0 ;pressed? 1530 BNE NOTRIG ;No. skip next 1540 JSR PROINI ;strt projectile 1550 NOTRIG JSR BOMADV ;advance bombs 1560 LDA EXPTIM ;do explosion? 1570 BNE NOEXP ;no! 1580 JSR CHKSAT ;satellite ok? 1590 JSR CHKHIT ;any hits? 1600 JSR EXPHAN ;handle expl. 1610 JSR PROADV ;advance shots 1620 LDA SAUCER ;saucer flag 1630 BEQ RESTIM ;saucer? No. 1640 JSR SSHOOT ;Yes. let shoot 1650 RESTIM LDA #1 ;get one 1660 STA EXPTIM ;reset timer 1670 NOEXP LDA BOMBS ;# bombs to go 1680 BNE LOOP ;any left? Yes. 1690 LDA GAMCTL ;game control 1700 BMI LOOP ;dead? Yes. 1710 LDA BOMACT ;bomb 0 status 1720 ORA BOMACT+1 ;bomb 1 status 1730 ORA BOMACT+2 ;bomb 2 status 1740 ORA BOMACT+3 ;bomb 3 status 1750 BEQ JSL ;any bombs? No. 1760 JMP LOOP ;Yes. continue 1770 JSL JMP SETLVL ;setup new level 1780 ; 1790 ; ------------------------ 1800 ; Initiate a new explosion 1810 ; ------------------------ 1820 ; 1830 NEWEXP LDA #64 ;1.07 seconds 1840 STA EXSCNT ;expl sound cnt 1850 INC EXPCNT ;one more expl 1860 LDY EXPCNT ;use as index 1870 LDA NEWX ;put X coord 1880 STA XPOS,Y ;into X table 1890 LDA NEWY ;put Y coord 1900 STA YPOS,Y ;into Y table 1910 LDA #0 ;init to zero 1920 STA CNT,Y ;explosion image 1930 RT1 RTS ;return 1940 ; 1950 ; ------------------------------ 1960 ; Main explosion handler routine 1970 ; ------------------------------ 1980 ; 1990 EXPHAN LDA #0 ;init to zero 2000 STA COUNTR ;zero counter 2010 RUNLP INC COUNTR ;nxt explosion 2020 LDA EXPCNT ;get explosion # 2030 CMP COUNTR ;any more expl? 2040 BMI RT1 ;No. return 2050 LDX COUNTR ;get index 2060 LDA #0 ;init plotclr 2070 STA PLOTCLR ;0 = plot block 2080 LDA CNT,X ;expl counter 2090 CMP #37 ;all drawn? 2100 BMI DOPLOT ;No. do it 2110 INC PLOTCLR ;1 = erase block 2120 SEC ;set carry 2130 SBC #37 ;erase cycle 2140 CMP #37 ;erase done? 2150 BMI DOPLOT ;No. erase block 2160 TXA ;move index 2170 TAY ;to Y register 2180 ; 2190 ; --------------------------- 2200 ; Repack explosion table, get 2210 ; rid of finished explosions 2220 ; --------------------------- 2230 ; 2240 REPACK INX ;next explosion 2250 CPX EXPCNT ;done? 2260 BEQ RPK2 ;No. repack more 2270 BPL RPKEND ;Yes. exit 2280 RPK2 LDA XPOS,X ;get X position 2290 STA XPOS,Y ;move back X 2300 LDA YPOS,X ;get Y position 2310 STA YPOS,Y ;move back Y 2320 LDA CNT,X ;get count 2330 STA CNT,Y ;move back count 2340 INY ;inc index 2350 BNE REPACK ;next repack 2360 RPKEND DEC EXPCNT ;dec pointers 2370 DEC COUNTR ;due to repack 2380 JMP RUNLP ;continue 2390 DOPLOT INC CNT,X ;inc pointer 2400 TAY ;exp phase in Y 2410 LDA XPOS,X ;get X-coord 2420 CLC ;clear carry 2430 ADC COORD1,Y ;add X offset 2440 STA PLOTX ;save it 2450 CMP #160 ;off screen? 2460 BCS RUNLP ;Yes. don't plot 2470 LDA YPOS,X ;get Y-coord 2480 ADC COORD2,Y ;add Y offset 2490 STA PLOTY ;save it 2500 CMP #96 ;off screen? 2510 BCS RUNLP ;Yes. don't plot 2520 JSR PLOT ;get plot addr 2530 LDA PLOTCLR ;erase it? 2540 BNE CLEARIT ;Yes. clear it 2550 LDA PLOTBL,X ;get plot bits 2560 ORA (LO),Y ;alter display 2570 PUTIT STA (LO),Y ;and replot it! 2580 JMP RUNLP ;exit 2590 CLEARIT LDA ERABIT,X ;erase bits 2600 AND (LO),Y ;turn off pixel 2610 JMP PUTIT ;put it back 2620 ; 2630 ; ------------------------ 2640 ; Dedicated multiply by 40 2650 ; with result in LO and HI 2660 ; ------------------------ 2670 ; 2680 PLOT LDA PLOTY ;get Y-coord 2690 ASL A ;shift it left 2700 STA LO ;save low *2 2710 LDA #0 ;get zero 2720 STA HI ;init high byte 2730 ASL LO ;shift low byte 2740 ROL HI ;rotate high *4 2750 ASL LO ;shift low byte 2760 LDA LO ;get low byte 2770 STA LOHLD ;save low *8 2780 ROL HI ;rotate high *8 2790 LDA HI ;get high byte 2800 STA HIHLD ;save high *8 2810 ASL LO ;shift low byte 2820 ROL HI ;rotate high *16 2830 ASL LO ;shift low byte 2840 ROL HI ;rotate high *32 2850 LDA LO ;get low *32 2860 CLC ;clear carry 2870 ADC LOHLD ;add low *8 2880 STA LO ;save low *40 2890 LDA HI ;get high *32 2900 ADC HIHLD ;add high *8 2910 STA HI ;save high *40 2920 ; 2930 ; ----------------------------- 2940 ; Get offset into screen memory 2950 ; ----------------------------- 2960 ; 2970 LDA # SCRN ;screen addr hi 3020 ADC HI ;add high offset 3030 STA HI ;save addr hi 3040 LDA PLOTX ;mask PLOTX for 3050 AND #3 ;the plot bits, 3060 TAX ;place in X.. 3070 LDA PLOTX ;get PLOTX and 3080 LSR A ;divide 3090 LSR A ;by 4 3100 CLC ;and add to 3110 ADC LO ;plot address 3120 STA LO ;for final plot 3130 BCC PLOT1 ;address. 3140 INC HI ;overflow? Yes. 3150 PLOT1 LDY #0 ;zero Y register 3160 RTS ;return 3170 ; 3180 ; ---------------- 3190 ; Bomb initializer 3200 ; ---------------- 3210 ; 3220 BOMINI LDA BOMBWT ;bomb wait time 3230 BNE NOBINI ;done? No. 3240 LDA BOMBS ;more bombs? 3250 BNE CKLIVE ;Yes. skip RTS 3260 NOBINI RTS ;No. return 3270 CKLIVE LDX #3 ;find.. 3280 CKLVLP LDA BOMACT,X ;an available.. 3290 BEQ GOTBOM ;bomb? Yes. 3300 DEX ;No. dec index 3310 BPL CKLVLP ;done? No. 3320 RTS ;return 3330 GOTBOM LDA #1 ;this one is.. 3340 STA BOMACT,X ;active now 3350 DEC BOMBS ;one less bomb 3360 LDA #0 ;zero out all.. 3370 STA BXHOLD,X ;vector X hold 3380 STA BYHOLD,X ;vector Y hold 3390 LDA GAMCTL ;game control 3400 BMI NOSAUC ;saucer possible? 3410 ; 3420 ; -------------- 3430 ; Saucer handler 3440 ; -------------- 3450 ; 3460 CPX #3 ;Yes. bomb #3? 3470 BNE NOSAUC ;No. skip next 3480 LDA RANDOM ;random number 3490 CMP SAUCHN ;compare chances 3500 BCS NOSAUC ;put saucer? No. 3510 LDA #1 ;Yes. get one 3520 STA SAUCER ;enable saucer 3530 LDA RANDOM ;random number 3540 AND #$03 ;range: 0..3 3550 TAY ;use as index 3560 LDA STARTX,Y ;saucer start X 3570 CMP #$FF ;random flag? 3580 BNE SAVESX ;No. use as X 3590 JSR SAURND ;random X-coord 3600 ADC #35 ;add X offset 3610 SAVESX STA FROMX ;from X vector 3620 STA BOMBX,X ;init X-coord 3630 LDA STARTY,Y ;saucer start Y 3640 CMP #$FF ;random flag? 3650 BNE SAVESY ;No. use as Y 3660 JSR SAURND ;random Y-coord 3670 ADC #55 ;add Y offset 3680 SAVESY STA FROMY ;from Y vector 3690 STA BOMBY,X ;init Y-coord 3700 LDA ENDX,Y ;saucer end X 3710 CMP #$FF ;random flag? 3720 BNE SAVEEX ;No. use as X 3730 LDA #230 ;screen right 3740 SEC ;offset so not 3750 SBC FROMY ;to hit planet 3760 SAVEEX STA TOX ;to X vector 3770 LDA ENDY,Y ;saucer end Y 3780 CMP #$FF ;random flag? 3790 BNE SAVEEY ;No. use as Y 3800 LDA FROMX ;use X for Y 3810 SAVEEY STA TOY ;to Y vector 3820 JMP GETBV ;skip next 3830 ; 3840 ; ------------ 3850 ; Bomb handler 3860 ; ------------ 3870 ; 3880 NOSAUC LDA RANDOM ;random number 3890 BMI BXMAX ;coin flip 3900 LDA RANDOM ;random number 3910 AND #1 ;make 0..1 3920 TAY ;use as index 3930 LDA BMAXS,Y ;top/bottom tbl 3940 STA BOMBY,X ;bomb Y-coord 3950 SETRBX LDA RANDOM ;random number 3960 CMP #250 ;compare w/250 3970 BCS SETRBX ;less than? No. 3980 STA BOMBX,X ;bomb X-coord 3990 JMP BOMVEC ;skip next 4000 BXMAX LDA RANDOM ;random number 4010 AND #1 ;make 0..1 4020 TAY ;use as index 4030 LDA BMAXS,Y ;0 or 250 4040 STA BOMBX,X ;bomb X-coord 4050 SETRBY LDA RANDOM ;random number 4060 CMP #250 ;compare w/250 4070 BCS SETRBY ;less than? No. 4080 STA BOMBY,X ;bomb Y-coord 4090 BOMVEC LDA BOMBX,X ;bomb X-coord 4100 STA FROMX ;shot from X 4110 LDA BOMBY,X ;bomb Y-coord 4120 STA FROMY ;shot from Y 4130 LDA #128 ;planet center 4140 STA TOX ;shot to X-coord 4150 STA TOY ;shot to Y-coord 4160 GETBV JSR VECTOR ;calc shot vect 4170 ; 4180 ; --------------------- 4190 ; Store vector in table 4200 ; --------------------- 4210 ; 4220 LDA LR ;bomb L/R flag 4230 STA BOMBLR,X ;bomb L/R table 4240 LDA UD ;bomb U/D flag 4250 STA BOMBUD,X ;bomb U/D table 4260 LDA VXINC ;velocity X inc 4270 STA BXINC,X ;Vel X table 4280 LDA VYINC ;velocity Y inc 4290 STA BYINC,X ;Vel Y table 4300 RTS ;return 4310 ; 4320 ; ----------------------------- 4330 ; Saucer random generator 0..99 4340 ; ----------------------------- 4350 ; 4360 SAURND LDA RANDOM ;random number 4370 AND #$7F ;0..127 4380 CMP #100 ;compare w/100 4390 BCS SAURND ;less than? No. 4400 RTS ;return 4410 ; 4420 ; -------------------- 4430 ; Saucer shoot routine 4440 ; -------------------- 4450 ; 4460 SSHOOT LDA RANDOM ;random number 4470 CMP #6 ;2.3% chance? 4480 BCS NOSS ;less than? No. 4490 LDX #7 ;7 = index 4500 LDA PROACT,X ;projectile #7 4510 BEQ GOTSS ;active? No. 4520 DEX ;6 = index 4530 LDA PROACT,X ;projectile #6 4540 BEQ GOTSS ;active? No. 4550 NOSS RTS ;return, no shot 4560 ; 4570 ; -------------------- 4580 ; Enable a saucer shot 4590 ; -------------------- 4600 ; 4610 GOTSS LDA #48 ;PF center, Y 4620 STA TOY ;shot to Y-coord 4630 LDA #80 ;PF center X 4640 STA TOX ;shot to X-coord 4650 LDA BOMBX+3 ;saucer x-coord 4660 SEC ;set carry 4670 SBC #44 ;PF offset 4680 STA FROMX ;shot from X 4690 STA PROJX,X ;X-coord table 4700 CMP #160 ;screen X limit 4710 BCS NOSS ;on screen? No. 4720 LDA BOMBY+3 ;saucer Y-coord 4730 SBC #37 ;PF offset 4740 LSR A ;2 scan lines 4750 STA FROMY ;shot from Y 4760 STA PROJY,X ;Y-coord table 4770 CMP #95 ;screen Y limit 4780 BCS NOSS ;on screen? No. 4790 LDA #13 ;shot snd time 4800 STA ESSCNT ;emeny snd count 4810 JMP PROVEC ;continue 4820 ; 4830 ; ---------------------- 4840 ; Projectile initializer 4850 ; ---------------------- 4860 ; 4870 PROINI LDX #5 ;6 projectiles 4880 PSCAN LDA PROACT,X ;get status 4890 BEQ GOTPRO ;active? No. 4900 DEX ;Yes. try again 4910 BPL PSCAN ;done? No. 4920 RTS ;return 4930 ; 4940 ; ----------------- 4950 ; Got a projectile! 4960 ; ----------------- 4970 ; 4980 GOTPRO LDA #13 ;shot snd time 4990 STA PSSCNT ;player sht snd 5000 LDA SATX ;satellite X 5010 STA FROMX ;shot from X 5020 STA PROJX,X ;proj X table 5030 LDA SATY ;satellite Y 5040 STA FROMY ;shot from Y 5050 STA PROJY,X ;proj Y table 5060 LDA CURX ;cursor X-coord 5070 SEC ;set carry 5080 SBC #48 ;playfld offset 5090 STA TOX ;shot to X-coord 5100 LDA CURY ;cursor Y-coord 5110 SEC ;set carry 5120 SBC #32 ;playfld offset 5130 LSR A ;2 line res 5140 STA TOY ;shot to Y-coord 5150 PROVEC JSR VECTOR ;compute vect 5160 LDA VXINC ;X increment 5170 STA PXINC,X ;X inc table 5180 LDA VYINC ;Y increment 5190 STA PYINC,X ;Y inc table 5200 LDA LR ;L/R flag 5210 STA PROJLR,X ;L/R flag table 5220 LDA UD ;U/D flag 5230 STA PROJUD,X ;U/D flag table 5240 LDA #1 ;active 5250 STA PROACT,X ;proj status 5260 RT2 RTS ;return 5270 ; 5280 ; -------------------- 5290 ; Bomb advance handler 5300 ; -------------------- 5310 ; 5320 BOMADV LDA BOMTIM ;bomb timer 5330 BNE RT2 ;time up? No. 5340 LDA LIVES ;any lives? 5350 BPL REGBT ;Yes. skip next 5360 LDA #1 ;speed up bombs 5370 BNE SETBTM ;skip next 5380 REGBT LDA BOMTI ;get bomb speed 5390 SETBTM STA BOMTIM ;reset timer 5400 LDX #3 ;check 4 bombs 5410 ADVBLP LDA BOMACT,X ;bomb on? 5420 BEQ NXTBOM ;No. try next 5430 JSR ADVIT ;advance bomb 5440 LDA LIVES ;any lives left? 5450 BPL SHOBOM ;Yes. skip next 5460 JSR ADVIT ;No. move bombs 5470 JSR ADVIT ;4 times faster 5480 JSR ADVIT ;than normal 5490 ; 5500 ; -------------------------- 5510 ; We've now got updated bomb 5520 ; coordinates for plotting! 5530 ; -------------------------- 5540 ; 5550 SHOBOM LDA BOMBY,X ;bomb Y-coord 5560 CLC ;clear carry 5570 ADC #2 ;bomb center off 5580 STA INDX1 ;save it 5590 LDA #0 ;get zero 5600 STA LO ;init low byte 5610 TXA ;index to Acc 5620 ORA # >PLR0 ;mask w/address 5630 STA HI ;init high byte 5640 STX INDX2 ;X temp hold 5650 CPX #3 ;saucer slot? 5660 BNE NOTSAU ;No. skip next 5670 LDA SAUCER ;saucer in slot? 5680 BNE NXTBOM ;Yes. skip bomb 5690 NOTSAU LDY BOMBLR,X ;L/R flag 5700 LDA #17 ;do 17 bytes 5710 STA TEMP ;set counter 5720 LDX BPSTRT,Y ;start position 5730 LDY INDX1 ;bomb Y pos 5740 BDRAW CPY #32 ;off screen top? 5750 BCC NOBDRW ;Yes. skip next 5760 CPY #223 ;screen bottom? 5770 BCS NOBDRW ;Yes. skip next 5780 LDA BOMPIC,X ;bomb picture 5790 STA (LO),Y ;put in PM area 5800 NOBDRW DEY ;PM index 5810 DEX ;picture index 5820 DEC TEMP ;dec count 5830 BNE BDRAW ;done? No. 5840 LDX INDX2 ;restore X 5850 LDA BOMBX,X ;bomb X-coord 5860 STA HPOSP0,X ;player pos 5870 NXTBOM DEX ;more bombs? 5880 BPL ADVBLP ;yes! 5890 RTS ;all done! 5900 ; 5910 ; -------------------------- 5920 ; Projectile advance handler 5930 ; -------------------------- 5940 ; 5950 PROADV LDX #11 ;do 8: 11..4 5960 PADVLP LDA BOMACT,X ;active? 5970 BEQ NXTPRO ;No. skip next 5980 LDA BOMBX,X ;bomb X-coord 5990 STA PLOTX ;plotter X 6000 LDA BOMBY,X ;bomb Y-coord 6010 STA PLOTY ;plotter Y 6020 STX XHOLD ;X-reg temporary 6030 JSR PLOT ;calc plot addr 6040 LDA (LO),Y ;get plot byte 6050 AND ERABIT,X ;erase bit 6060 STA (LO),Y ;replace byte 6070 LDX XHOLD ;restore X 6080 JSR ADVIT ;advance proj 6090 LDA BOMBX,X ;bomb X-coord 6100 CMP #160 ;off screen? 6110 BCS KILPRO ;Yes. kill it 6120 STA PLOTX ;plotter X 6130 LDA BOMBY,X ;bomb Y-coord 6140 CMP #96 ;off screen? 6150 BCS KILPRO ;Yes. kill it 6160 STA PLOTY ;plotter Y 6170 JSR PLOT ;calc plot addr 6180 LDA PLOTBL,X ;get plot mask 6190 AND (LO),Y ;chk collision 6200 BEQ PROJOK ;No. plot it 6210 LDX XHOLD ;restore X 6220 LDA PLOTX ;proj X-coord 6230 STA NEWX ;explo X-coord 6240 LDA PLOTY ;proj Y-coord 6250 STA NEWY ;explo Y-coord 6260 JSR NEWEXP ;set off explo 6270 KILPRO LDA #0 ;get zero 6280 STA BOMACT,X ;kill proj 6290 JMP NXTPRO ;skip next 6300 PROJOK LDA PLOTBL,X ;plot mask 6310 LDX XHOLD ;restore X 6320 AND PROMSK,X ;mask color 6330 ORA (LO),Y ;add playfield 6340 STA (LO),Y ;replace byte 6350 NXTPRO DEX ;next projectile 6360 CPX #3 ;proj #3 yet? 6370 BNE PADVLP ;No. continue 6380 RTS ;return 6390 ;